//package com.xiguaji.tiktok.task.aweme.repository;
//
//import com.xiguaji.boot.toolkit.DateTimeUtils;
//import com.xiguaji.tiktok.task.aweme.Aweme;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.jdbc.core.BatchPreparedStatementSetter;
//import org.springframework.jdbc.core.JdbcTemplate;
//import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter;
//import org.springframework.util.StringUtils;
//
//import java.sql.Connection;
//import java.sql.PreparedStatement;
//import java.sql.SQLException;
//import java.util.List;
//import java.util.Optional;
//
//
//@Slf4j
//public class AwemeExtRepositoryImpl implements AwemeExtRepository {
//
//    @Autowired
//    @Lazy
//    AwemeRepository awemeRepository;
//
//    @Autowired
//    JdbcTemplate jdbcTemplate;
//
//    private Optional<Aweme> insertOrUpdateByCondition(Aweme aweme, boolean isSkipUpdate, String operator) {
//        // lock here
//        var optionalAweme = awemeRepository.findByoAwemeId(aweme.getOAwemeId());
//
//        if (!optionalAweme.isPresent()) {
//            aweme.setCreateBy(operator);
//            aweme.setUpdateBy(operator);
//            awemeRepository.save(aweme);
//        } else if (optionalAweme.isPresent() && !isSkipUpdate) {
//            var origin = optionalAweme.get();
//            aweme.setId(origin.getId());
//            aweme.setCreateTime(origin.getCreateTime());
//            aweme.setCreateBy(origin.getCreateBy());
//            aweme.setUpdateBy(operator);
//            awemeRepository.save(aweme);
//        }
//
//        return optionalAweme;
//    }
//
//    @Override
//    public Optional<Aweme> insertOrUpdateAndReturnOriginAweme(Aweme aweme, String operator) {
//        return insertOrUpdateByCondition(aweme, false, operator);
//    }
//    @Override
//    public void batchSave(List<Aweme> awemes) {
//        long seconds = DateTimeUtils.currentTimeSecond();
//
//        jdbcTemplate.batchUpdate(
//                "INSERT INTO `tiktok`.`aweme`" +
//                        "(`id`, `o_aweme_id`, `o_desc`, `o_create_time`, `o_uid`, `o_music_id`," +
//                        " `o_comment_count`, `o_digg_count`,`o_download_count`, `o_play_count`, `o_share_count`, `o_whatsapp_share_count`, " +
//                        "`o_forward_count`, `o_rate`, `o_blogger_nick_name`, `o_blogger_unique_id`, `o_text_extra`, `o_share_url`, " +
//                        "`o_duration`, `o_region`, `o_is_ads`, `o_cover`, `o_dynamic_cover`, `create_time`, " +
//                        "`update_time`, `create_by`, `update_by`, `datecode`, `score`, `blogger_type`)" +
//                        " VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
//                , new BatchPreparedStatementSetter() {
//                    @Override
//                    public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
//                        Aweme aweme = awemes.get(i);
//                        preparedStatement.setLong(1, 0);
//                        preparedStatement.setLong(2, aweme.getOAwemeId());
//                        preparedStatement.setString(3, aweme.getODesc());
//                        preparedStatement.setLong(4, aweme.getOCreateTime());
//                        preparedStatement.setLong(5, aweme.getOUid());
//                        preparedStatement.setLong(6, aweme.getOMusicId());
//                        preparedStatement.setInt(7, aweme.getOCommentCount());
//                        preparedStatement.setLong(8, aweme.getODiggCount());
//                        preparedStatement.setInt(9, aweme.getODownloadCount());
//                        preparedStatement.setLong(10, aweme.getOPlayCount());
//                        preparedStatement.setLong(11, aweme.getOShareCount());
//                        preparedStatement.setInt(12, aweme.getOWhatsappShareCount());
//                        preparedStatement.setInt(13, aweme.getOForwardCount());
//                        preparedStatement.setLong(14, aweme.getORate());
//                        preparedStatement.setString(15, aweme.getOBloggerNickName());
//                        preparedStatement.setString(16, aweme.getOBloggerUniqueId());
//                        preparedStatement.setString(17, aweme.getOTextExtra());
//                        preparedStatement.setString(18, aweme.getOShareUrl());
//                        preparedStatement.setInt(19, aweme.getODuration());
//                        preparedStatement.setString(20, aweme.getORegion());
//                        preparedStatement.setBoolean(21, aweme.isOIsAds());
//                        preparedStatement.setString(22, aweme.getOCover());
//                        preparedStatement.setString(23, aweme.getODynamicCover());
//                        preparedStatement.setLong(24, seconds);
//                        preparedStatement.setLong(25, seconds);
//                        preparedStatement.setString(26, "batch save");
//                        preparedStatement.setString(27, "batch save");
//                        preparedStatement.setInt(28, aweme.getDatecode());
//                        preparedStatement.setDouble(29, aweme.getScore());
//                        preparedStatement.setString(30, aweme.getBloggerType());
//                    }
//
//                    @Override
//                    public int getBatchSize() {
//                        return awemes.size();
//                    }
//                });
//    }
//
//    @Override
//    public void batchUpdate(List<Aweme> awemes) {
//        long seconds = DateTimeUtils.currentTimeSecond();
//
//        jdbcTemplate.batchUpdate(
//                "UPDATE `tiktok`.`aweme` SET  " +
//                        "`o_desc` = ?, `o_music_id` = ?, `o_comment_count` = ?, `o_digg_count` = ?, `o_download_count` = ?, `o_play_count` = ?," +
//                        " `o_share_count` = ?, `o_whatsapp_share_count` = ?, `o_forward_count` = ?, `o_rate` = ?, `o_blogger_nick_name` = ?, " +
//                        "`o_blogger_unique_id` = ?, `o_text_extra` = ?, `o_share_url` = ?, `o_duration` = ?, `o_region` = ?, `o_is_ads` = ?," +
//                        " `o_cover` = ?, `o_dynamic_cover` = ?,  `update_time` = ?,  `update_by` = ?, `score` = ?, `blogger_type` = ?" +
//                        " WHERE `datecode` = ? and `id` = ?"
//                , new BatchPreparedStatementSetter() {
//                    @Override
//                    public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
//                        Aweme aweme = awemes.get(i);
//                        preparedStatement.setString(1, aweme.getODesc());
//                        preparedStatement.setLong(2, aweme.getOMusicId());
//                        preparedStatement.setInt(3, aweme.getOCommentCount());
//                        preparedStatement.setLong(4, aweme.getODiggCount());
//                        preparedStatement.setInt(5, aweme.getODownloadCount());
//                        preparedStatement.setLong(6, aweme.getOPlayCount());
//                        preparedStatement.setInt(7, aweme.getOShareCount());
//                        preparedStatement.setInt(8, aweme.getOWhatsappShareCount());
//                        preparedStatement.setInt(9, aweme.getOForwardCount());
//                        preparedStatement.setInt(10, aweme.getORate());
//                        preparedStatement.setString(11, aweme.getOBloggerNickName());
//                        preparedStatement.setString(12, aweme.getOBloggerUniqueId());
//                        preparedStatement.setString(13, aweme.getOTextExtra());
//                        preparedStatement.setString(14, aweme.getOShareUrl());
//                        preparedStatement.setLong(15, aweme.getODuration());
//                        preparedStatement.setString(16, aweme.getORegion());
//                        preparedStatement.setBoolean(17, aweme.isOIsAds());
//                        preparedStatement.setString(18, aweme.getOCover());
//                        preparedStatement.setString(19, aweme.getODynamicCover());
//                        preparedStatement.setLong(20, seconds);
//                        preparedStatement.setString(21, "batch update");
//                        preparedStatement.setDouble(22, aweme.getScore());
//                        preparedStatement.setString(23, aweme.getBloggerType());
//                        preparedStatement.setLong(24, aweme.getDatecode());
//                        preparedStatement.setLong(25, aweme.getId());
//
//                    }
//                    @Override
//                    public int getBatchSize() {
//                        return awemes.size();
//                    }
//                });
//    }
//    @Override
//    public void batchUpdateType(List<Aweme> awemes) {
//        long seconds = DateTimeUtils.currentTimeSecond();
//
//        jdbcTemplate.batchUpdate(
//                "UPDATE `tiktok`.`aweme` SET  " +
//                        " `update_time` = ?,  `update_by` = ?, `aweme_type` = ?, `blogger_type` = ?" +
//                        " WHERE `id` = ? "
//                , new BatchPreparedStatementSetter() {
//                    @Override
//                    public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
//                        Aweme aweme = awemes.get(i);
//
//                        preparedStatement.setLong(1, seconds);
//                        preparedStatement.setString(2, "awemeType&bloggerType batchUpdate");
//                        preparedStatement.setString(3, aweme.getAwemeType());
//                        preparedStatement.setString(4, aweme.getBloggerType());
//                        preparedStatement.setLong(5, aweme.getId());
//
//                    }
//                    @Override
//                    public int getBatchSize() {
//                        return awemes.size();
//                    }
//                });
//    }
//    public void batchSave2(List<Aweme> awemes) {
//        long seconds = DateTimeUtils.currentTimeSecond();
//
//        Connection connection = null;
//        PreparedStatement preparedStatement = null;
//
//        try{
//            connection = jdbcTemplate.getDataSource().getConnection();
//            connection.setAutoCommit(false);
//
//            String sql ="INSERT INTO `tiktok`.`aweme`" +
//            "(`id`, `o_aweme_id`, `o_desc`, `o_create_time`, `o_uid`, `o_music_id`," +
//                    " `o_comment_count`, `o_digg_count`,`o_download_count`, `o_play_count`, `o_share_count`, `o_whatsapp_share_count`, " +
//                    "`o_forward_count`, `o_rate`, `o_blogger_nick_name`, `o_blogger_unique_id`, `o_text_extra`, `o_share_url`, " +
//                    "`o_duration`, `o_region`, `o_is_ads`, `o_cover`, `o_dynamic_cover`, `create_time`, " +
//                    "`update_time`, `create_by`, `update_by`, `datecode`, `score`, `blogger_type`)" +
//                    " VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
//
//            for (Aweme aweme : awemes) {
//                preparedStatement = connection.prepareStatement(sql);
//                preparedStatement.setLong(1, 0);
//                preparedStatement.setLong(2, aweme.getOAwemeId());
//                preparedStatement.setString(3, aweme.getODesc());
//                preparedStatement.setLong(4, aweme.getOCreateTime());
//                preparedStatement.setLong(5, aweme.getOUid());
//                preparedStatement.setLong(6, aweme.getOMusicId());
//                preparedStatement.setInt(7, aweme.getOCommentCount());
//                preparedStatement.setLong(8, aweme.getODiggCount());
//                preparedStatement.setInt(9, aweme.getODownloadCount());
//                preparedStatement.setLong(10, aweme.getOPlayCount());
//                preparedStatement.setLong(11, aweme.getOShareCount());
//                preparedStatement.setInt(12, aweme.getOWhatsappShareCount());
//                preparedStatement.setInt(13, aweme.getOForwardCount());
//                preparedStatement.setLong(14, aweme.getORate());
//                preparedStatement.setString(15, aweme.getOBloggerNickName());
//                preparedStatement.setString(16, aweme.getOBloggerUniqueId());
//                preparedStatement.setString(17, aweme.getOTextExtra());
//                preparedStatement.setString(18, aweme.getOShareUrl());
//                preparedStatement.setInt(19, aweme.getODuration());
//                preparedStatement.setString(20, aweme.getORegion());
//                preparedStatement.setBoolean(21, aweme.isOIsAds());
//                preparedStatement.setString(22, aweme.getOCover());
//                preparedStatement.setString(23, aweme.getODynamicCover());
//                preparedStatement.setLong(24, seconds);
//                preparedStatement.setLong(25, seconds);
//                preparedStatement.setString(26, "batch save");
//                preparedStatement.setString(27, "batch save");
//                preparedStatement.setInt(28, aweme.getDatecode());
//                preparedStatement.setDouble(29, aweme.getScore());
//                preparedStatement.setString(30, aweme.getBloggerType());
//                preparedStatement.execute();
//            }
//            connection.commit();
//        }catch (Exception e){
//            try {
//                connection.rollback();
//            } catch (SQLException throwables) {
//                throwables.printStackTrace();
//            }
//            log.error("batch update error!",e);
//        }finally {
//            try {
//                preparedStatement.close();
//                connection.close();
//            } catch (SQLException throwables) {
//                throwables.printStackTrace();
//            }
//        }
//    }
//
//
//
//
//    public void batchUpdate2(List<Aweme> awemes) {
//        long seconds = DateTimeUtils.currentTimeSecond();
//
//        Connection connection = null;
//        PreparedStatement preparedStatement = null;
//
//        try{
//            connection = jdbcTemplate.getDataSource().getConnection();
//            connection.setAutoCommit(false);
//
//
//            String sql ="UPDATE `tiktok`.`aweme` SET  " +
//                    "`o_desc` = ?, `o_music_id` = ?, `o_comment_count` = ?, `o_digg_count` = ?, `o_download_count` = ?, `o_play_count` = ?," +
//                    " `o_share_count` = ?, `o_whatsapp_share_count` = ?, `o_forward_count` = ?, `o_rate` = ?, `o_blogger_nick_name` = ?, " +
//                    "`o_blogger_unique_id` = ?, `o_text_extra` = ?, `o_share_url` = ?, `o_duration` = ?, `o_region` = ?, `o_is_ads` = ?," +
//                    " `o_cover` = ?, `o_dynamic_cover` = ?,  `update_time` = ?,  `update_by` = ?, `score` = ?, `blogger_type` = ?" +
//                    " WHERE `id` = ?";
//
//            for (Aweme aweme : awemes) {
//                preparedStatement = connection.prepareStatement(sql);
//                preparedStatement.setString(1, aweme.getODesc());
//                preparedStatement.setLong(2, aweme.getOMusicId());
//                preparedStatement.setInt(3, aweme.getOCommentCount());
//                preparedStatement.setLong(4, aweme.getODiggCount());
//                preparedStatement.setInt(5, aweme.getODownloadCount());
//                preparedStatement.setLong(6, aweme.getOPlayCount());
//                preparedStatement.setInt(7, aweme.getOShareCount());
//                preparedStatement.setInt(8, aweme.getOWhatsappShareCount());
//                preparedStatement.setInt(9, aweme.getOForwardCount());
//                preparedStatement.setInt(10, aweme.getORate());
//                preparedStatement.setString(11, aweme.getOBloggerNickName());
//                preparedStatement.setString(12, aweme.getOBloggerUniqueId());
//                preparedStatement.setString(13, aweme.getOTextExtra());
//                preparedStatement.setString(14, aweme.getOShareUrl());
//                preparedStatement.setLong(15, aweme.getODuration());
//                preparedStatement.setString(16, aweme.getORegion());
//                preparedStatement.setBoolean(17, aweme.isOIsAds());
//                if(StringUtils.isEmpty(aweme.getOCover())){
//                    log.error(String.format("aweme.getOCover():awemeId=%s;OUid=%s;OCover=%s;", aweme.getOAwemeId(), aweme.getOUid(),aweme.getOCover()));
//                }
//                preparedStatement.setString(18, aweme.getOCover());
//                preparedStatement.setString(19, aweme.getODynamicCover());
//                preparedStatement.setLong(20, seconds);
//                preparedStatement.setString(21, "batch update");
//                preparedStatement.setDouble(22, aweme.getScore());
//                preparedStatement.setString(23, aweme.getBloggerType());
//                preparedStatement.setLong(24, aweme.getId());
//                preparedStatement.execute();
//            }
//            connection.commit();
//        }catch (Exception e){
//            try {
//                connection.rollback();
//            } catch (SQLException throwables) {
//                log.error("==============================================batch update error SQLException!",throwables.getMessage());
//                throwables.printStackTrace();
//            }
//            log.error("==============================================batch update error! Exception!",e.getMessage());
//        }finally {
//            try {
//                preparedStatement.close();
//                connection.close();
//            } catch (SQLException throwables) {
//                log.error("=======================finally============batch update error SQLException!",throwables.getMessage());
//                throwables.printStackTrace();
//            }
//        }
//    }
//
//}
